package com.xgp.Excel.poi;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Random;

/**
 * 写测试
 */
public class ExcelWrite {

    String PATH = "D:\\develop\\java\\IDEA2019\\code\\qq\\src\\test\\java\\com\\xgp\\Excel\\poi\\";

    @Test
    public void test1() throws IOException {
        //1、创建一个工作溥
        Workbook workbook = new HSSFWorkbook();//03版的
        //2、创建一个工作表
        Sheet sheet = workbook.createSheet("03版本的Excel");
        //3、创建一个行
        Row row1 = sheet.createRow(0);
        //4、创建一个单元格
        Cell cell = row1.createCell(0);
        //5、写数据
        cell.setCellValue("姓名");
        Cell cel2 = row1.createCell(1);
        cel2.setCellValue("年龄");
        Cell cel3 = row1.createCell(2);
        cel3.setCellValue("记录时间");

        //数据行
        for(int i = 1;i < 100;i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("xgp" + i);
            row.createCell(1).setCellValue(new Random().nextInt(i));
            row.createCell(2).setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        }

        //流操作进行输出
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "03版本的Excel.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("文件生成完毕");
    }

    //07版本
    @Test
    public void test2() throws IOException {
        //1、创建一个工作溥
        Workbook workbook = new XSSFWorkbook();//03版的
        //2、创建一个工作表
        Sheet sheet = workbook.createSheet("07版本的Excel");
        //3、创建一个行
        Row row1 = sheet.createRow(0);
        //4、创建一个单元格
        Cell cell = row1.createCell(0);
        //5、写数据
        cell.setCellValue("姓名");
        Cell cel2 = row1.createCell(1);
        cel2.setCellValue("年龄");
        Cell cel3 = row1.createCell(2);
        cel3.setCellValue("记录时间");

        //数据行
        for(int i = 1;i < 100;i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("xgp" + i);
            row.createCell(1).setCellValue(new Random().nextInt(i));
            row.createCell(2).setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        }

        //流操作进行输出
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "07版本的Excel.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("文件生成完毕");
    }

    /**
     * 03大数据
     * @throws IOException
     */
    @Test
    public void test3() throws IOException {

        long start = System.currentTimeMillis();

        //1、创建一个工作溥
        Workbook workbook = new HSSFWorkbook();//03版的
        //2、创建一个工作表
        Sheet sheet = workbook.createSheet("03版本的大数据测试Excel");
        //3、创建一个行
        Row row1 = sheet.createRow(0);
        //4、创建一个单元格
        Cell cell = row1.createCell(0);
        //5、写数据
        cell.setCellValue("姓名");
        Cell cel2 = row1.createCell(1);
        cel2.setCellValue("年龄");
        Cell cel3 = row1.createCell(2);
        cel3.setCellValue("记录时间");

        //数据行
        for(int i = 1;i < 65536;i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("xgp" + i);
            row.createCell(1).setCellValue(new Random().nextInt(i));
            row.createCell(2).setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        }

        //流操作进行输出
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "03版本的大数据测试Excel.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("文件生成完毕");

        long end = System.currentTimeMillis();
        System.out.println(end - start);    //3515
    }

    /**
     * 07大数据
     * @throws IOException
     */
    @Test
    public void test4() throws IOException {

        long start = System.currentTimeMillis();

        //1、创建一个工作溥
        Workbook workbook = new XSSFWorkbook();//07版的
        //2、创建一个工作表
        Sheet sheet = workbook.createSheet("07版本的大数据测试Excel");
        //3、创建一个行
        Row row1 = sheet.createRow(0);
        //4、创建一个单元格
        Cell cell = row1.createCell(0);
        //5、写数据
        cell.setCellValue("姓名");
        Cell cel2 = row1.createCell(1);
        cel2.setCellValue("年龄");
        Cell cel3 = row1.createCell(2);
        cel3.setCellValue("记录时间");

        //数据行
        for(int i = 1;i < 65536;i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("xgp" + i);
            row.createCell(1).setCellValue(new Random().nextInt(i));
            row.createCell(2).setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        }

        //流操作进行输出
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "07版本的大数据测试Excel.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("文件生成完毕");

        long end = System.currentTimeMillis();
        System.out.println(end - start);    //14923
    }

    /**
     * 07加速版
     * @throws IOException
     */
    @Test
    public void test5() throws IOException {

        long start = System.currentTimeMillis();

        //1、创建一个工作溥
        Workbook workbook = new SXSSFWorkbook();//07版的
        //2、创建一个工作表
        Sheet sheet = workbook.createSheet("07版本的大数据加速测试Excel");
        //3、创建一个行
        Row row1 = sheet.createRow(0);
        //4、创建一个单元格
        Cell cell = row1.createCell(0);
        //5、写数据
        cell.setCellValue("姓名");
        Cell cel2 = row1.createCell(1);
        cel2.setCellValue("年龄");
        Cell cel3 = row1.createCell(2);
        cel3.setCellValue("记录时间");

        //数据行
        for(int i = 1;i < 65536;i++) {
            Row row = sheet.createRow(i);
            row.createCell(0).setCellValue("xgp" + i);
            row.createCell(1).setCellValue(new Random().nextInt(i));
            row.createCell(2).setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
        }

        //流操作进行输出
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "07版本的大数据加速测试Excel.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        //清楚临时文件
        ((SXSSFWorkbook)workbook).dispose();
        System.out.println("文件生成完毕");

        long end = System.currentTimeMillis();
        System.out.println(end - start);    //1857
    }
}
